package com.whf.android.jar.net;


import androidx.annotation.IntDef;

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

/**
 * HTTP网络请求返回码
 *
 * @author wang.hai.fang
 * @version 2017.12.05 19:07
 */
public final class HttpCode {

    public static final int CODE_0 = 0;

    ///////////////////////////////////////////////////////////////////////////
    // 200成功
    ///////////////////////////////////////////////////////////////////////////

    //region ********** 200成功 **********
    /**
     * （成功）服务器已成功处理了请求。
     */
    public static final int CODE_200 = 200;

    /**
     * （已创建）请求成功并且服务器创建了新的资源。
     */
    public static final int CODE_201 = 201;

    /**
     * （已接受）服务器已接受请求，但尚未处理。
     */
    public static final int Accepted = 202;

    /**
     * （无内容）服务器成功处理了请求，但没有返回任何内容
     */
    public static final int No_content = 204;
    //endregion

    ///////////////////////////////////////////////////////////////////////////
    // 300 其他错误
    ///////////////////////////////////////////////////////////////////////////

    public static final int CODE__1 = -1;
    public static final int CODE_308 = 308;
    public static final int CODE_380 = 380;

    ///////////////////////////////////////////////////////////////////////////
    // 400请求错误
    ///////////////////////////////////////////////////////////////////////////


    //region ********** 400请求错误 **********
    /**
     * （错误请求） 服务器不理解请求的语法。
     */
    public static final int CODE_400 = 400;
    /**
     * （错误请求） 服务器不理解请求的语法。
     */
    public static final int CODE_401 = 401;
    /**
     * 登录失效
     */
    public static final int CODE_403 = 403;
    /**
     * （未找到） 服务器找不到请求的网页。
     */
    public static final int CODE_404 = 404;

    /**
     * （请求超时） 服务器等候请求时发生超时。
     */
    public static final int CODE_408 = 408;

    /**
     * （已删除） 如果请求的资源已永久删除，服务器就会返回此响应
     */
    public static final int CODE_DELETED = 410;
    //endregion


    ///////////////////////////////////////////////////////////////////////////
    // 500服务器错误
    ///////////////////////////////////////////////////////////////////////////


    //region ********** 500服务器错误 **********

    /**
     * （服务器内部错误）
     * 服务器遇到错误，无法完成请求
     */
    public static final int CODE_500 = 500;

    /**
     * （尚未实施） 服务器不具备完成请求的功能。 例如，服务器无法识别请求方法时可能会返回此代码。
     */
    public static final int CODE_501 = 501;

    /**
     * （错误网关） 服务器作为网关或代理，从上游服务器收到无效响应。
     */
    public static final int CODE_502 = 502;

    /**
     * (服务不可用) 服务器目前无法使用（由于超载或停机维护）。
     * 通常，这只是暂时状态。
     */
    public static final int CODE_503 = 503;

    /**
     * （网关超时） 服务器作为网关或代理，但是没有及时从上游服务器收到请求。
     */
    public static final int CODE_504 = 504;

    /**
     * （HTTP 版本不受支持） 服务器不支持请求中所用的 HTTP 协议版本。
     */
    public static final int CODE_505 = 505;
    /**
     * 未知错误
     */
    public static final int CODE_605 = 605;

    //endregion

    @IntDef({CODE_0,

            CODE_200,
            CODE_201,
            Accepted,
            No_content,

            CODE_308,
            CODE_380,

            CODE_400,
            CODE_401,
            CODE_403,
            CODE_404,
            CODE_408,
            CODE_DELETED,

            CODE_500,
            CODE_501,
            CODE_502,
            CODE_503,
            CODE_504,
            CODE_505,
            CODE_605
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface Code {

    }
}
